//
//  TopK.swift
//  Swift-LeetCode
//
//  Created by 卢悦明 on 2024/2/25.
//

import UIKit
/**
 n 个数，找出k个最大的 例如：【1 ，2, 4， 9, 6, 7, 5, 8, 3】 找出3个最大数 9， 8， 7
 1、如果是找k个最大的用小顶堆
 2、如果是找k个最小用大顶堆
 */
class TopK: NSObject {
//    获取最大的k个数
    func getNumberMax(_ array: [Int], k: Int) {
        let binaryHeap = BinaryHeap(defaultValue: -1, .mix_binary_heap)
        for item in array {
            if binaryHeap.size() < k {
                binaryHeap.add(item)
            } else {
                if item > binaryHeap.get() ?? -1 {
                    binaryHeap.replace(item)
                }
            }
        }
        binaryHeap.printHeap()
    }
    //    获取最小的k个数
    func getNumberMix(_ array: [Int], k: Int) {
        let binaryHeap = BinaryHeap(defaultValue: -1)
        for item in array {
            if binaryHeap.size() < k {
                binaryHeap.add(item)
            } else {
                if item > binaryHeap.get() ?? -1 {
                    binaryHeap.replace(item)
                }
            }
        }
        binaryHeap.printHeap()
    }
}
